package com.xinchao.dao;

import com.xinchao.model.DeviceSimInfo;
import com.xinchao.model.dto.DeviceSimInfoActivationTimeDTO;
import com.xinchao.model.dto.DeviceSimInfoTrafficDTO;
import com.xinchao.model.vo.DeviceSimInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 终端sim卡信息Mapper
 */
public interface DeviceSimInfoMapper {
	/**
	 * 保存终端sim卡信息
	 * @param deviceSimInfo DeviceSimInfo
	 */
	void insertDeviceSimInfo(DeviceSimInfo deviceSimInfo);

	/**
	 * 修改终端sim卡信息
	 * @param deviceSimInfo DeviceSimInfo
	 */
	void updateDeviceSimInfo(DeviceSimInfo deviceSimInfo);

	DeviceSimInfoVO selectByDeviceCode(String deviceCode);

	/**
	 * 获取终端sim卡信息总数
	 * @param city 城市
	 * @return Long
	 */
	Long countDeviceSimInfo(String city);

	/**
	 * 获取第一个终端sim卡信息流量（升序排列）
	 * @param city 城市
	 * @return DeviceSimInfoTrafficDTO
	 */
	DeviceSimInfoTrafficDTO selectFirstDeviceSimInfoTraffic(String city);

	/**
	 * 获取终端信息列表
	 * @param city 城市
	 * @param startId 起始ID
	 * @param endId 结束ID
	 * @param size 条数
	 * @return List<DeviceSimInfoTrafficDTO>
	 */
	List<DeviceSimInfoTrafficDTO> listDeviceSimInfoTraffic(@Param("city") String city, @Param("startId") Long startId, @Param("endId") Long endId, @Param("size") Long size);

	/**
	 * 获取没有激活时间的终端sim卡信息总数
	 * @param city 城市
	 * @return Long
	 */
	Long countDeviceSimInfoNoActivationTime(String city);

	/**
	 * 获取第一个终端sim卡信息激活时间（升序排列）
	 * @param city 城市
	 * @return DeviceSimInfoActivationTimeDTO
	 */
	DeviceSimInfoActivationTimeDTO selectFirstDeviceSimInfoActivationTime(String city);

	/**
	 * 获取终端信息激活时间列表
	 * @param city 城市
	 * @param startRow 开始行
	 * @param endRow 结束行
	 * @return List<DeviceSimInfoTrafficDTO>
	 */
	List<DeviceSimInfoActivationTimeDTO> listDeviceSimInfoActivationTime(@Param("city") String city, @Param("startRow") Long startRow, @Param("endRow") Long endRow);

	/**
	 * 更新终端sim卡信息激活时间
	 */
	void updateDeviceSimInfoActivationTime(DeviceSimInfoActivationTimeDTO dto);

	/**
	 * 设置SIM卡状态(0:启用 1:关停)
	 * hanqr 2018-08-16
	 * @param deviceCode 终端唯一编码
	 * @param simStatus SIM卡状态(0:启用 1:关停)
	 */
	void setSimStatus(@Param("deviceCode") String deviceCode, @Param("simStatus") Integer simStatus);

	/**
	 * 更新终端sim卡信息当月流量
	 */
	void updateDeviceSimInfoMonthTraffic(DeviceSimInfoTrafficDTO dto);

	/**
	 * 更新终端sim卡信息历史总流量（移动只能获取6个月的数据）
	 */
	void updateDeviceSimInfoHistoryTraffic(DeviceSimInfoTrafficDTO dto);
}